{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x7fdc77d95170>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "# 固定随机种子，使得运行结果可以稳定复现\n",
    "torch.manual_seed(1024)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 产生训练用的数据\n",
    "x_origin = torch.linspace(100, 300, 200)\n",
    "# 将变量X归一化，否则梯度下降法很容易不稳定\n",
    "x = (x_origin - torch.mean(x_origin)) / torch.std(x_origin)\n",
    "epsilon = torch.randn(x.shape)\n",
    "y = 10 * x + 5 + epsilon"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 为了使用PyTorch的高层封装函数，我们通过继承Module类来定义函数\n",
    "class Linear(torch.nn.Module):\n",
    "    \n",
    "    def __init__(self):\n",
    "        \"\"\"\n",
    "        定义线性回归模型的参数：a, b\n",
    "        \"\"\"\n",
    "        super().__init__()\n",
    "        self.a = torch.nn.Parameter(torch.zeros(()))\n",
    "        self.b = torch.nn.Parameter(torch.zeros(()))\n",
    "\n",
    "    def forward(self, x):\n",
    "        \"\"\"\n",
    "        根据当前的参数估计值，得到模型的预测结果\n",
    "        参数\n",
    "        ----\n",
    "        x ：torch.tensor，变量x\n",
    "        返回\n",
    "        ----\n",
    "        y_pred ：torch.tensor，模型预测值\n",
    "        \"\"\"\n",
    "        return self.a * x + self.b\n",
    "\n",
    "    def string(self):\n",
    "        \"\"\"\n",
    "        输出当前模型的结果\n",
    "        \"\"\"\n",
    "        return f'y = {self.a.item():.2f} * x + {self.b.item():.2f}'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step 1, Loss:  101.19; Result: y = 3.12 * x + -1.99\n",
      "Step 2, Loss:  3.61; Result: y = 3.48 * x + -2.28\n",
      "Step 3, Loss:  4.00; Result: y = 3.22 * x + -1.97\n",
      "Step 4, Loss:  14.92; Result: y = 2.85 * x + -1.22\n",
      "Step 5, Loss:  25.90; Result: y = 2.68 * x + -0.23\n",
      "Step 6, Loss:  44.56; Result: y = 2.92 * x + 1.08\n",
      "Step 7, Loss:  60.46; Result: y = 3.74 * x + 2.61\n",
      "Step 8, Loss:  60.59; Result: y = 5.07 * x + 4.15\n",
      "Step 9, Loss:  47.31; Result: y = 6.73 * x + 5.52\n",
      "Step 10, Loss:  24.05; Result: y = 8.22 * x + 6.48\n",
      "Step 11, Loss:  14.43; Result: y = 9.36 * x + 5.75\n",
      "Step 12, Loss:  4.00; Result: y = 9.75 * x + 5.42\n",
      "Step 13, Loss:  1.48; Result: y = 9.88 * x + 5.28\n",
      "Step 14, Loss:  0.58; Result: y = 9.89 * x + 5.26\n",
      "Step 15, Loss:  1.48; Result: y = 9.89 * x + 5.20\n",
      "Step 16, Loss:  0.95; Result: y = 9.88 * x + 5.18\n",
      "Step 17, Loss:  1.03; Result: y = 9.88 * x + 5.17\n",
      "Step 18, Loss:  1.68; Result: y = 9.84 * x + 5.14\n",
      "Step 19, Loss:  0.55; Result: y = 9.86 * x + 5.15\n",
      "Step 20, Loss:  1.27; Result: y = 9.94 * x + 5.21\n"
     ]
    }
   ],
   "source": [
    "# 定义每批次用到的数据量\n",
    "batch_size = 20\n",
    "# 定义模型\n",
    "model = Linear()\n",
    "# 确定最优化算法\n",
    "learning_rate = 0.1\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n",
    "\n",
    "for t in range(20):\n",
    "    # 选取当前批次的数据，用于训练模型\n",
    "    ix = (t * batch_size) % len(x)\n",
    "    xx = x[ix: ix + batch_size]\n",
    "    yy = y[ix: ix + batch_size]\n",
    "    yy_pred = model(xx)\n",
    "    # 计算当前批次数据的损失\n",
    "    loss = (yy - yy_pred).pow(2).mean()\n",
    "    # 将上一次的梯度清零\n",
    "    optimizer.zero_grad()\n",
    "    # 计算损失函数的梯度\n",
    "    loss.backward()\n",
    "    # 迭代更新模型参数的估计值\n",
    "    optimizer.step()\n",
    "    # 注意！loss记录的是模型在当前批次数据上的损失，该数值的波动较大\n",
    "    print(f'Step {t + 1}, Loss: {loss: .2f}; Result: {model.string()}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义损失函数\n",
    "mse = lambda y, y_pred: (y - y_pred).pow(2).mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在最优化算法的运行过程中，记录模型在批量数据和整体数据上的损失\n",
    "# 定义每批次用到的数据量\n",
    "batch_size = 20\n",
    "# 定义模型\n",
    "model = Linear()\n",
    "# 确定最优化算法\n",
    "learning_rate = 0.1\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n",
    "stats = {'batch_loss': [], 'total_loss': []}\n",
    "\n",
    "for t in range(20):\n",
    "    # 选取当前批次的数据，用于训练模型\n",
    "    ix = (t * batch_size) % len(x)\n",
    "    xx = x[ix: ix + batch_size]\n",
    "    yy = y[ix: ix + batch_size]\n",
    "    # 计算当前批次数据的损失\n",
    "    loss = mse(yy, model(xx))\n",
    "    # 将上一次的梯度清零\n",
    "    optimizer.zero_grad()\n",
    "    # 计算损失函数的梯度\n",
    "    loss.backward()\n",
    "    # 迭代更新模型参数的估计值\n",
    "    optimizer.step()\n",
    "    # 预估模型在整个数据集上面的损失\n",
    "    stats['batch_loss'].append(loss.item())\n",
    "    stats['total_loss'].append(mse(y, model(x)).item())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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fmpqKmeffTYxMTF5I2ratGnDgAED8lpn3OLVBGQF0N//whjTHojGST7yvQf0BHYENboCAhOQQ6UpIiLipoKjXgqTnJycrxWioE8//ZSXX36ZRx55hHr16uXtX7RoEddccw233HILHTt25LHHHiMxMZGhQ4eya9euIq9XsBukdevW9OjRg3vvvZd3332Xxx57jOnTpzNixAhGjhxJenp6Xo1KQevWrWPgwIGsW7eOL774grp16xIdHc3ChQvp2rUrgwYN4sILL8xX9xJMXk1AFgHxxph/+F7fCcyz1ubgDME9wRgz1BgTCdyKM1zXNf4umKysrJCah19ERIr2/fff06dPn3wTdwH89ddfdO/enWXLlnHxxRfTs2dPrrjiirz3p0yZwmmnncbpp5/OI488AkCjRo2YPXs2v/32G8ceeyxz587Nd80PPviAe+65h++++44GDRrk3WfGjBn07t2bRx55hKlTpzJixAjGjRvHsmXLSEpKomfPnvznP/8hNTU171q7d+/m3nvvpVevXiQkJLBw4cJ8rSTx8fF89tln3HfffXz44Yd0796dE044IW+4cbB4MgGx1mYDVwHPG2P2AqOA23zv7QVuBD4DdgOdgIdcChVwFjHyj1NXHYiISOhISkpi06ZN+dZUWbVqFQAnnXQSI0eOpG/fvoSFhbF3716ys7NZvXo1a9eupXbt2jz++ONMnjyZsLAwvv76a0488UTGjRvHuHHjmDFjRr45Snr16sWiRYuIi4tj+PDhDB06lAMHDgDkTbc+ZMgQrr/+etLT0xk6dCiXXHIJDRo0YOnSpVx99dV51+rbty9Llizhnnvu4fPPPyc7OxuABx54gFatWvHII49w1VVXsWrVKrp163bY1x0ZGck999zD2rVrueSSS1ixYkW+gtegKLi6npc2oBlwOtCwkPfa48wXUruM14wHbGJioq1M8fHxFrAbN26s1OuKiFSG1NRUu3LlSpuamup2KEGTnJxs69atawF71VVX5e1/5JFHbJ8+fez69evz9n366ae2Tp06NiwszIaHh9tzzz33sOu9//77tkOHDnb27NnF3jcxMdGOHTvW3nHHHcUe9+uvv9q1a9eW+HVkZGTkPd+9e7cdO3as/fnnn0s8L9D27dttdnZ2scf4/4188MEH9vHHHy/060xMTLSABeJtCZ+3xqomIR/fXCCJiYmJ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MnXq1FLdv6qpCDVIjDHeKkQtTEQEvPwy3Hef8/qhh+DGG10NSUSCqHbtsm+zZh06f9YsZ9/w4fmv265d2a/78ssV/nKeeuoprLXcc889ed3iUVFRvPDCC1hrae+btDE+Pp74+Hh++eUX4uLiSPOty7V3715uuOEGxo0bd9i1rbW8+eabjBw50vcltqN37968+OKLJca1evVqhg0bxgsvvEBcXBwtWrTg559/Pmz74IMPAKclx+/jjz9m0aJFvPLKK4cVs+7fv5/atWuX4ztVNZSABJHnExBwWjsmTHB++WNjne4YEREPWr16NcOHD+fTTz/l+eefB2DixImMGzeOhQsXsnnzZk4++WSGDh3K1VdfzYcffsiLL75Io0aNGDduHMYYunfvzn3+P8oCzJgxg7Vr13JjwB9p9957L6+88gqrVq3Kd+yePXuYOHEiJ510EnPnzuW3336jZ8+enHPOOYSHhxMZGUnnzp3p3LkzN910E4sWLaJz5860bdsWIF+i0a1bNxYuXEiTJk34/fff82379u0jOzv7sP1btmxh/fr17ArydAvqggmiapGA+P3zn04hapMmh/ZZq+4YkeosJaXs50RHH3o+erRzjYIjN37/vezXreAMzTt27OD888/niiuuYNy4cfz888+cdtppjB07lgEDBtCzZ08Ahg0bxrRp0zjiiCPIzc2lX79+vPnmm3Tt2pWGDRvy2WefHTaoYNu2bdx88838/e9/p2PHjnn7zzjjDAYNGsT555/P4sWLaeL7/zMyMpK7776bU045hb/97W/069ePRx99tNC458yZw8CBA4v8uq666ioWL15MdHR0vhEyubm5pKenM3nyZKZNm5bvnNzcXA4ePMidd97JQw89VLZvZAUoAQkiTw7FLU5g8rFmDVxxBcycCQG/cCJSjcTFVez8iIjCF76s6HXLoWXLlvz8889Mnz6dOnXq5O2PjY3Nq9cDp/v8jjvuyHsNzggTf9dKweQjISGBM888k5iYGCZPnnzYfd9++2169uzJ0KFDef/99+nUqRP169dn7dq1dO7cOe+6fpmZmXnPU1JSsNbmq0GB/BOqzZ8/n/Dw8MPu+9xzzzF+/Hhyc3OZNm1a3rwngfzDioNFXTBBVK1aQAJZC9ddBytXwq23uh2NiEipGGO4+OKLSU9PJycnB2stubm55OTkMGLECC666CJy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G/7zH9i82d2YSunee+8lMjKSefPmsXDhQrfDEan2lIB4lNtdMPv3789bTVStH1KoO++EZ591RsdkZrodTYnatWvH1VdfDcBdd90VcussiVQ3SkA8yu0E5JlnniE5OZmjjz5arR9SuPHj4eijYdIkiIpyO5pSueuuu6hVqxbfffcdn376qdvhiFRrSkA8yl8D4kYXTEJCApMnTwac1o8wj/X3S5A0awY//ODMlOoRzZo14/rrrwecWpDc3FyXIxKpvvTJ4VFutoA888wzJCUl0b17d84666yg3188JDz80PMtW5zumBBfffbWW28lPj6eVatW8f7777sdjki1pQTEo9xKQBISEnjmmWcAtX5IGVgLf/87fP45DBkCf/3ldkRFatCgATfffDPgFKZmZ2e7HJFI9aRPD49yKwGZPHkySUlJdOvWjdGjRwf13uJhxsD06dCiBaxb50xWtm+f21EV6YYbbqBRo0Zs3LiRN9980+1wRKolJSAeFTgPSLCq9Q8cOKDWDym/jh2deUKaNYPVq51p2w8ccDuqQtWpU4fbb78dgPvvv5+MjAyXIxKpfvQJ4lH+FpCcnBzS0tKCcs/JkyeTmJhIt27dOPvss4NyT6lmOnWC+fOhcWOnQPW00yAEFlQszLhx42jRogVbt27l5ZdfdjsckWpHCYhHxcXF5c29EYxumAMHDjBp0iTA6RdX64eUW9euThLSsCEsXw7Dh0NKittRHaZWrVp5a8M8/PDDpKamuhyRSPWiTxGPMsYEtQ7k2WefJTExkaOOOopzzjmnyu8n1Vz37vDll1CvHixZAqefDiH4AX/FFVfQoUMHdu/enbfsgIhUDiUgHhasuUASExPV+iGVr2dP+OILiI+HRYtg8OCQW0U3KiqK++67D4DHH3+cAyFasyLiRfok8bBgtYA8++yzHDhwgK5du3LuuedW6b2khunTB+bOdVpCli93kpJPPnE7qnwuuugiunbtSkJCAk8//bTb4YhUG0pAPCwYCUhg68c999yj1g+pfP37w48/Qt++kJAA06Y584aEiPDwcB588EHAWYDxrxCew0TES/Rp4mGBQ3GrynPPPUdCQgJdunThvPPOq7L7SA3Xrh0sXgwTJsBrrznzhoSQ0aNHc+yxx5KSksLEiRPdDkekWlAC4mH+FpCqqgFJSkrKa3K+5557CA+cVlukskVFwX33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\n",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 创建一个图形框\n",
    "fig = plt.figure(figsize=(6, 6), dpi=100)\n",
    "# 在图形框里只画一幅图\n",
    "ax = fig.add_subplot(111)\n",
    "# 解决中文显示问题\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.rcParams.update({'font.size': 13})\n",
    "ax.set_xlabel('训练步数', fontsize=18)\n",
    "ax.set_ylabel('模型损失', fontsize=18)\n",
    "ax.plot(stats['batch_loss'], 'k', label='批次损失')\n",
    "ax.plot(stats['total_loss'], 'r-.', label='整体损失')\n",
    "legend = plt.legend(shadow=True)\n",
    "plt.savefig(\"sgd.png\", dpi=200)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
